﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace DesignPatterns.PrototypePatterns
{
    class PrototypePattern
    {
        void Main(string[] args) {
            PrototypeClass baseobj = new PrototypeClass();
            //基于内存二进制流的copy，性能比new要好，但是缺少约束，需要使用各种权限、资源占用的情况，要仔细考虑
           //原型模式默认是浅拷贝，引用类型成员直接拷贝引用地址，修改克隆对象会影响原始对象
           //不想受影响，就在重写clone的时候，手动改造成深拷贝
            PrototypeClass newobj = (PrototypeClass)baseobj.Clone();
        }
    }

    public class PrototypeClass : ICloneable
    {
        public object Clone()
        {
            PrototypeClass prototypeClass = null;
            try
            {
                prototypeClass = (PrototypeClass)base.MemberwiseClone();
            }
            catch { }
            return prototypeClass;
        }
    }
}
